
/*Emamul Islam Emon.      Id No: 093-15-844
5)	Example of Queue. */




#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

struct Node{
int Data;
struct Node *Link;
};
typedef struct Node *QueuePointer;

void append(QueuePointer&Head,QueuePointer &Tail,int x)
{
	QueuePointer NewNode;
	NewNode =(QueuePointer)malloc(sizeof(struct Node));
	NewNode->Data = x;
	NewNode->Link = NULL;
	/*if queue is empty, just assign both the head
	and tail to the new memory location*/
	if (Tail == NULL)
		Head = NewNode;
	else
		Tail->Link = NewNode;
	Tail = NewNode;
}

void serve(QueuePointer &Head,QueuePointer &Tail,int &item)
{
	QueuePointer Temp;
	if (Head == NULL)
		printf("Queue is empty.");
	else
	{
		item = Head->Data;
		Temp = Head;
		Head = Head->Link;
	//if queue has only one node and after
	//moving head to the next node, head is
	//pointing to NULL, we have to set Tail
	//to NULL too
		if (Head==NULL)
		Tail = NULL;
		free(Temp);
	}
}

void create_queue(QueuePointer &Head,QueuePointer &Tail){
	printf("Please insert 3 elements:");
	int a;
	for(int i=0;i<3;i++){
		scanf("%d",&a);
		append(Head,Tail,a);
	}
}
void insert_item(QueuePointer &Head,QueuePointer &Tail){
	int item;
	printf("Enter the item:");
	scanf("%d",&item);
	append(Head,Tail,item);
}
void delete_item(QueuePointer &Head,QueuePointer &Tail){
	int item;
	serve(Head,Tail,item);
	printf("The deleted item:%d",item);
}

void show(QueuePointer &Head,QueuePointer &Tail){
	QueuePointer Temp;
	Temp=Head;
	int x;
	while(Temp!=NULL){
		x=Temp->Data;
		printf("%d--->",x);
		Temp=Temp->Link;
	}
}





void main()
{
	clrscr();
	QueuePointer Head,Tail;
	Head=Tail=NULL;
	int choice;
	printf("Welcome to Queue Application");
	printf("\nPlease Press the approprite key for applications:\n");
	printf("\t1.Create Queue.\n");
	printf("\t2.Insert item.\n");
	printf("\t3.Delete item.\n");
	printf("\t4.Show Queue.\n");
	printf("\t5. Exit.\n");

	do{
		printf("\nEnter your choice:");
		scanf("%d",&choice);
		switch(choice){
			case 1:
				create_queue(Head,Tail);
				break;
			case 2:
				insert_item(Head, Tail);
				break;
			case 3:
				delete_item(Head, Tail);
				break;
			case 4:
				show(Head,Tail);
				break;
			default:
				break;
	       }
	}while(choice!=5);

	getch();


}












































